package com.wzr.login.model;

import java.util.HashMap;

public class KDPasswordEncry {
	/**
	 * 金蝶密码前缀
	 */
	public static final String KD_ENCRY_PREFIX = ")  F \", ,P T #8 *P!D &D 80!N &@ <0 C '< : !M &4 )0";

	private HashMap<Character, String[]> dictionary;
	public KDPasswordEncry()
	{
		dictionary = new HashMap<>();
		dictionary.put('0', new String[] { " P ", "#  ", ",  ", "P ", "#  ", ",  " });
		dictionary.put('1', new String[] { " Q ", "#$ ", ",0 ", "Q ", "#$ ", ",0 " });
		dictionary.put('2', new String[] { " R ", "#( ", ",@ ", "R ", "#( ", ",@ " });
		dictionary.put('3', new String[] { " S ", "#, ", ",P ", "S ", "#, ", ",P " });
		dictionary.put('4', new String[] { " T ", "#0 ", "-  ", "T ", "#0 ", "-  " });
		dictionary.put('5', new String[] { " U ", "#4 ", "-0 ", "U ", "#4 ", "-0 " });
		dictionary.put('6', new String[] { " V ", "#8 ", "-@ ", "V ", "#8 ", "-@ " });
		dictionary.put('7', new String[] { " W ", "#< ", "-P ", "W ", "#< ", "-P " });
		dictionary.put('8', new String[] { " X ", "#@ ", ".  ", "X ", "#@ ", ".  " });
		dictionary.put('9', new String[] { " Y ", "#D ", ".0 ", "Y ", "#D ", ".0 " });
		dictionary.put('a', new String[] { "!A ", "&$ ", "80", "!A ", "&$ ", "80" });
		dictionary.put('b', new String[] { "!B ", "&( ", "8@", "!B ", "&( ", "8@" });
		dictionary.put('c', new String[] { "!C ", "&, ", "8P", "!C ", "&, ", "8P" });
		dictionary.put('d', new String[] { "!D ", "&0 ", "9 ", "!D ", "&0 ", "9 " });
		dictionary.put('e', new String[] { "!E ", "&4 ", "90", "!E ", "&4 ", "90" });
		dictionary.put('f', new String[] { "!F ", "&8 ", "9@", "!F ", "&8 ", "9@" });
		dictionary.put('g', new String[] { "!G ", "&< ", "9P", "!G ", "&< ", "9P" });
		dictionary.put('h', new String[] { "!H ", "&@ ", ": ", "!H ", "&@ ", ": " });
		dictionary.put('i', new String[] { "!I ", "&D ", ":0", "!I ", "&D ", ":0" });
		dictionary.put('j', new String[] { "!J ", "&H ", ":@", "!J ", "&H ", ":@" });
		dictionary.put('k', new String[] { "!K ", "&L ", ":P", "!K ", "&L ", ":P" });
		dictionary.put('l', new String[] { "!L ", "&P ", "; ", "!L ", "&P ", "; " });
		dictionary.put('m', new String[] { "!M ", "&T ", ";0", "!M ", "&T ", ";0" });
		dictionary.put('n', new String[] { "!N ", "&X ", ";@", "!N ", "&X ", ";@" });
		dictionary.put('o', new String[] { "!O ", "&\\ ", ";P", "!O ", "&\\ ", ";P" });
		dictionary.put('p', new String[] { "!P ", "'  ", "< ", "!P ", "'  ", "< " });
		dictionary.put('q', new String[] { "!Q ", "'$ ", "<0", "!Q ", "'$ ", "<0" });
		dictionary.put('r', new String[] { "!R ", "'( ", "<@", "!R ", "'( ", "<@" });
		dictionary.put('s', new String[] { "!S ", "', ", "<P", "!S ", "', ", "<P" });
		dictionary.put('t', new String[] { "!T ", "'0 ", "= ", "!T ", "'0 ", "= " });
		dictionary.put('u', new String[] { "!U ", "'4 ", "=0", "!U ", "'4 ", "=0" });
		dictionary.put('v', new String[] { "!V ", "'8 ", "=@", "!V ", "'8 ", "=@" });
		dictionary.put('w', new String[] { "!W ", "'< ", "=P", "!W ", "'< ", "=P" });
		dictionary.put('x', new String[] { "!X ", "'@ ", "> ", "!X ", "'@ ", "> " });
		dictionary.put('y', new String[] { "!Y ", "'D ", ">0", "!Y ", "'D ", ">0" });
		dictionary.put('z', new String[] { "!Z ", "'H ", ">@", "!Z ", "'H ", ">@" });
		dictionary.put('A', new String[] { "!! ", "$$ ", "00", "!! ", "$$ ", "00" });
		dictionary.put('B', new String[] { "!\" ", "$(", "0@", "!\" ", "$( ", "0@" });
		dictionary.put('C', new String[] { "!# ", "$, ", "0P", "!# ", "$, ", "0P" });
		dictionary.put('D', new String[] { "!$ ", "$0 ", "1 ", "!$ ", "$0 ", "1 " });
		dictionary.put('E', new String[] { "!% ", "$4 ", "10", "!% ", "$4 ", "10" });
		dictionary.put('F', new String[] { "!& ", "$8 ", "1@", "!& ", "$8 ", "1@" });
		dictionary.put('G', new String[] { "!' ", "$< ", "1P", "!' ", "$< ", "1P" });
		dictionary.put('H', new String[] { "!( ", "$@ ", "2 ", "!( ", "$@ ", "2 " });
		dictionary.put('I', new String[] { "!) ", "$D ", "20", "!) ", "$D ", "20" });
		dictionary.put('J', new String[] { "!* ", "$H ", "2@", "!* ", "$H ", "2@" });
		dictionary.put('K', new String[] { "!+ ", "$L ", "2P", "!+ ", "$L ", "2P" });
		dictionary.put('L', new String[] { "!, ", "$P ", "3 ", "!, ", "$P ", "3 " });
		dictionary.put('M', new String[] { "!- ", "$T ", "30", "!- ", "$T ", "30" });
		dictionary.put('N', new String[] { "!. ", "$X ", "3@", "!. ", "$X ", "3@" });
		dictionary.put('O', new String[] { "!/ ", "$\\ ", "3P", "!/ ", "$\\ ", "3P" });
		dictionary.put('P', new String[] { "!0 ", "%  ", "4 ", "!0 ", "%  ", "4 " });
		dictionary.put('Q', new String[] { "!1 ", "%$ ", "40", "!1 ", "%$ ", "40" });
		dictionary.put('R', new String[] { "!2 ", "%( ", "4@", "!2 ", "%( ", "4@" });
		dictionary.put('S', new String[] { "!3 ", "%, ", "4P", "!3 ", "%, ", "4P" });
		dictionary.put('T', new String[] { "!4 ", "%0 ", "5 ", "!4 ", "%0 ", "5 " });
		dictionary.put('U', new String[] { "!5 ", "%4 ", "50", "!5 ", "%4 ", "50" });
		dictionary.put('V', new String[] { "!6 ", "%8 ", "5@", "!6 ", "%8 ", "5@" });
		dictionary.put('W', new String[] { "!7 ", "%< ", "5P", "!7 ", "%< ", "5P" });
		dictionary.put('X', new String[] { "!8 ", "%@ ", "6 ", "!8 ", "%@ ", "6 " });
		dictionary.put('Y', new String[] { "!9 ", "%D ", "60", "!9 ", "%D ", "60" });
		dictionary.put('Z', new String[] { "!: ", "%H ", "6@", "!: ", "%H ", "6@" });
		dictionary.put('!', new String[] { " A ", "\"$ ", "(0", " A ", "\"$ ", "(0" });
		dictionary.put('@', new String[] { " ! ", "$  ", "0 ", " ! ", "$  ", "0 " });
		dictionary.put('#', new String[] { " C ", "\", ", "(P", " C ", "\", ", "(P" });
		dictionary.put('$', new String[] { " D ", "\"0 ", ") ", " D ", "\"0 ", ") " });
		dictionary.put('%', new String[] { " E ", "\"4 ", ")0", " E ", "\"4 ", ")0" });
		dictionary.put('^', new String[] { "!> ", "%X ", "7@", "!> ", "%X ", "7@" });
		dictionary.put('&', new String[] { " F ", "\"8 ", ")@", " F ", "\"8 ", ")@" });
		dictionary.put('*', new String[] { " J ", "\"H ", "*@", " J ", "\"H ", "*@" });
		dictionary.put('(', new String[] { " H ", "\"@ ", "* ", " H ", "\"@ ", "* " });
		dictionary.put(')', new String[] { " I ", "\"D ", "*0", " I ", "\"D ", "*0" });
		dictionary.put('_', new String[] { "!? ", "%\\ ", "7P", "!? ", "%\\ ", "7P" });
		dictionary.put('+', new String[] { " K ", "\"L ", "* P", " K ", "\"L ", "*P" });
		dictionary.put('=', new String[] { " ] ", "#T ", "/0", " ] ", "#T ", "/0" });
		dictionary.put('-', new String[] { " M ", "\"T ", "+0", " M ", "\"T ", "+0" });
		dictionary.put('[', new String[] { "!; ", "%L ", "6P", "!; ", "%L ", "6P" });
		dictionary.put(']', new String[] { "!= ", "%T ", "70", "!= ", "%T ", "70" });
		dictionary.put('{', new String[] { "![ ", "'L ", ">P", "![ ", "'L ", ">P" });
		dictionary.put('}', new String[] { "!] ", "'T ", "?0", "!] ", "'T ", "?0" });
		dictionary.put(';', new String[] { " [ ", "#L ", ".P", " [ ", "#L ", ".P" });
		dictionary.put(':', new String[] { " Z ", "#H ", ".@", " Z ", "#H ", ".@" });
		dictionary.put('"', new String[] { " B ", "\"( ", "(@", " B ", "\"( ", "(@" });
		dictionary.put('\'', new String[] { " G ", "\"< ", ")P", " G ", "\"< ", ")P" });
		dictionary.put(',', new String[] { " L ", "\"P ", "+ ", " L ", "\"P ", "+ " });
		dictionary.put('.', new String[] { " N ", "\"X ", "+@", " N ", "\"X ", "+@" });
		dictionary.put('?', new String[] { " _ ", "#\\ ", "/P", " _ ", "#\\ ", "/P" });
		dictionary.put('\\', new String[] { "!< ", "%P ", "7 ", "!< ", "%P ", "7 " });
		dictionary.put('|', new String[] { "!\\ ", "'P ", "? ", "!\\ ", "'P ", "? " });
		dictionary.put('/', new String[] { " 0 ", "\"\\", "+P", " 0 ", "\"\\", "+P" });
		dictionary.put('`', new String[] { "!@ ", "&  ", "8 ", "!@ ", "&  ", "8 " });
		dictionary.put('~', new String[] { "!^ ", "'X ", "?@", "!^ ", "'X ", "?@" });
		dictionary.put('<', new String[] { " \\ ", "#P ", "/ ", " \\ ", "#P ", "/ " });
		dictionary.put('>', new String[] { " ^ ", "#X ", "/@", " ^ ", "#X ", "/@" });
	}

	/**
	 * 将传入的明文密码加密
	 * @param password 明文密码
	 * @return 返回加密后的密码
	 */
	public String EncryptPassword(String password)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(KD_ENCRY_PREFIX);
		int index = 0;
		for (char ch : password.toCharArray())
		{
			if (index > 5)
				index = 0;
			sb.append(dictionary.get(ch)[index]);
			index++;
		}
		sb.append(" ");
		return sb.toString();
	}

}
